/*!
 *  timer_v.c - H8/300H Tinyサンプルプログラム
 *
 *  日付        内容
 *  ----------- ------------------------------------------------
 *  2009/08/21  新規作成
 */
#include "timer_v.h"
#include "36064.h"

void init_timer_v(void)
{
    //参考:http://www.besttechnology.co.jp/modules/guide/index.php?content_id=4
    //BTC065 H8/3687Fマイコンボードセット サンプルプログラム V1.4 3687FSMPL.ZIP
    //smpl2.c
    //サンプル2 - Version 1.4
    //タイマVによるウェイト&時計

    //タイマVのカウンタ機能を使用した1ミリ秒でプログラムを停止するwait関数で、
    //引数に1000を与えると丁度1秒間プログラムを止めることができます。

    //-----------------------
    // タイマV設定 (最小分解能1msウェイト用)
    //-----------------------
    TV.TCRV0.BIT.CCLR = 1;      // コンペアマッチAでTCNTVクリア
    TV.TCRV0.BIT.CKS  = 0;      // 停止
    TV.TCRV1.BIT.ICKS = 0;      // 上記CKS=3と併用で 14.7456MHz/64=230.4kHz
    TV.TCSRV.BIT.CMFA = 0;      // フラグクリア
    TV.TCNTV          = 0;      // タイマカウンタクリア
    TV.TCORA          = 230;    // タイムコンスタントレジスタA設定
}

#pragma interrupt(INT_timerV)

/*!
 * \brief タイマV割り込みルーチン（ベクタ番号：22、ベクタアドレス：H'002C～H'002D）
 */
void INT_timerV()
{
}

void wait(const int msec)
{
    int i;

    TV.TCRV0.BIT.CKS  = 3;          // カウント開始

    //指定した回数だけ1ms待つ
    for (i = 0; i < msec; i++) {
        while (!TV.TCSRV.BIT.CMFA) ;  // TCNTV=TCORAフラグ待ち
        TV.TCSRV.BIT.CMFA = 0;        // フラグクリア
    }

    TV.TCRV0.BIT.CKS = 0;           // カウント停止
}
